package com.cloudkinto.service.ecang;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cloudkinto.entity.OrderEcangDo;
import com.cloudkinto.entity.ShopDo;

import java.util.List;

public interface ECangService extends IService<OrderEcangDo> {
    void getStockPosition();

    /**
     * 获取订单
     *
     * @param page        1
     * @param pageSize    50
     * @param orderStatus 订单状态0:删除;1:草稿;2:确认;3:异常;4:已提交;5:已打印;6:已下架;7:已打包;8:已装袋;9:装袋完成;10:已加挂;11:物流完成;12:物流发货;13:已签收' (物流的状态为3和4 海外仓的状态为4)
     *                    调用类型apiType为1时，只能获取4:已提交或者"4：已提交+ 0：删除"(随参数achieve_type配置)，调用类型apiType为2时，只能获取3:异常;4:已提交
     * @param achieveType 当值=0时，调用类型apiType为1，获取4：已提交状态的单；
     *                    当值=1时，调用类型apiType为1，获取"4：已提交"&  "0：删除"状态的单；
     * @param dateType    1 创建时间 2 更新时间
     *                    传输1时，dateFor/dateTo对应的是创建时间，传输2时，dateFor/dateTo对应的是更新时间
     * @param dateFor     开始时间
     * @param dateTo      结束时间
     */
    void getPreShippingOrder(ShopDo shopDo, int page, int pageSize, int orderStatus, int achieveType, String dateType, String dateFor, String dateTo);

    void getPreShippingOrder(ShopDo shopDo, int page, int pageSize, int orderStatus, int achieveType);

    void getPreShippingOrder(ShopDo shopDo, int page, int pageSize, int orderStatus);

    boolean completeOrder(ShopDo shopDo, String orderCode, String smCode, String courierCode, String length, String width, String height, String weight);

    boolean completeOrder(ShopDo shopDo, String orderCode, String smCode, String courierCode);

    /**
     * 上传跟踪号
     *
     * @param orderCode      订单号
     * @param orderNo        平台单号
     * @param trackingNumber 跟踪号
     */
    boolean uploadTrackingNo(String orderCode, String orderNo, String trackingNumber);

    boolean uploadTrackingNo(String orderCode, String orderNo, String trackingNumber, String smCode, String courierCode);

    /**
     * 订单状态变更接口(仅支持订单状态为：已提交）
     *
     * @param shopId
     * @param orderCode      仓配参考号
     * @param status         订单状态，只能为1（出库），2（取消）
     * @param trackingNumber 跟踪号
     * @param trackId        trackId
     * @param reason         原因（状态为2必填
     * @param courierCode    承运商
     */
    boolean orderStatusModify(Long shopId, String orderCode, int status, String trackingNumber, Long trackId, String reason, String courierCode);

    /**
     * 获取订单状态
     *
     * @param orderCode 订单号
     * @return orderStatus 状态 0:删除;1:草稿;2:确认;3:异常;4:已提交;5:已打印;6:已下架;7:已打包;8:已装袋;9:装袋完成;10:已加挂;11:物流完成;12:物流发货;13:已签收’ (物流的状态为3和4 海外仓的状态为4)
     */
//    String getOrderStatus(String orderCode);

    /**
     * 更改跟踪号
     *
     * @param orderCode      订单号
     * @param trackingNumber 跟踪号（无需修改不需要填这个键）
     * @param smCode         运输方式代码（无需修改不需要填这个键）
     * @param courierCode    承运商信息
     */
    boolean modifyTrackingNo(ShopDo shopDo, String orderCode, String trackingNumber, String smCode, String courierCode);

    List<String> queryByShopIdAndNoUploadExpress(Long id, String currentDateFormat, String currentDateFormat1);

    void autoSyncShippingOrder();
}
